Added merge mode

Chris Eidhof лет %!s(int64=9): %!d(string=назад)
Родитель
Сommit
b2218df623
2 измененных файлов с 17 добавлено и 5 удалено
  1. 7 5
      app/models/agents/website_agent.rb
  2. 10 0
      spec/models/agents/website_agent_spec.rb

+ 7 - 5
app/models/agents/website_agent.rb

@@ -120,7 +120,7 @@ module Agents
120 120
 
121 121
       # Check for optional fields
122 122
       if options['mode'].present?
123
-        errors.add(:base, "mode must be set to on_change or all") unless %w[on_change all].include?(options['mode'])
123
+        errors.add(:base, "mode must be set to on_change, all or merge") unless %w[on_change all merge].include?(options['mode'])
124 124
       end
125 125
 
126 126
       if options['expected_update_period_in_days'].present?
@@ -226,10 +226,12 @@ module Agents
226 226
       incoming_events.each do |event|
227 227
         interpolate_with(event) do
228 228
           url_to_scrape = event.payload['url']
229
-          valid_url = url_to_scrape =~ /^https?:\/\//i
230
-          docs = valid_url ? check_url(url_to_scrape) : []
229
+          docs = []
230
+          docs = check_url(url_to_scrape) if url_to_scrape =~ /^https?:\/\//i
231 231
           docs.each do |doc|
232
-            create_event payload: doc
232
+            new_payload = interpolated['mode'].to_s == "merge" ? event.payload.dup : {}
233
+            new_payload.merge! doc
234
+            create_event payload: new_payload
233 235
           end
234 236
         end
235 237
       end
@@ -252,7 +254,7 @@ module Agents
252 254
           end
253 255
         end
254 256
         true
255
-      when 'all', ''
257
+      when 'all', 'merge', ''
256 258
         true
257 259
       else
258 260
         raise "Illegal options[mode]: #{interpolated['mode']}"

+ 10 - 0
spec/models/agents/website_agent_spec.rb

@@ -521,6 +521,16 @@ fire: hot
521 521
 
522 522
         expect(Event.last.payload['response_info']).to eq('The reponse from XKCD was 200 OK.')
523 523
       end
524
+
525
+      it "should support merging of events" do
526
+        expect {
527
+          @checker.options = @valid_options
528
+          @checker.options[:mode] = "merge"
529
+          @checker.receive([@event])
530
+        }.to change { Event.count }.by(1)
531
+        last_payload = Event.last.payload
532
+        expect(last_payload['link']).to eq('Random')
533
+      end
524 534
     end
525 535
   end
526 536